import axios from 'axios';
import config from './config';
import {Message} from 'element-ui';
// import Cookies from "js-cookie";
// import router from '@/router'

export default function $axios(options) {
    return new Promise((resolve, reject) => {
        const instance = axios.create({
            baseURL: config.PromiseConfig.baseUrl,
            headers: config.PromiseConfig.headers,
            timeout: config.PromiseConfig.timeout,
            withCredentials: config.PromiseConfig.withCredentials
        })

        // request 拦截器
        // instance.interceptors.request.use(
        //     config => {
        //         let token = sessionStorage.getItem('token');
        //         // 1. 请求开始的时候可以结合 vuex 开启全屏 loading 动画
        //         // 2. 带上token
        //         if (token) {
        //             config.headers.Authorization = token;
        //         } else {
        //             // 重定向到登录页面
        //             // router.push('/login')
        //         }
        //         return config;
        //     },
        //
        //     error => {
        //         // 请求错误时
        //         console.log('request:', error)
        //         // 1. 判断请求超时
        //         if (error.code === 'ECONNABORTED' && error.message.indexOf('timeout') !== -1) {
        //             console.log('timeout请求超时')
        //             Message.error('请求超时！')
        //             // return service.request(originalRequest);// 再重复请求一次
        //         }
        //         // 2. 需要重定向到错误页面
        //         const errorInfo = error.response;
        //         if (errorInfo) {
        //             error = errorInfo.data  // 页面那边catch的时候就能拿到详细的错误信息,看最下边的Promise.reject
        //             const errorStatus = errorInfo.status; // 404 403 500 ...
        //             router.push({
        //                 path: `/${errorStatus}`
        //             })
        //         }
        //         return Promise.reject(error) // 在调用的那边可以拿到(catch)你想返回的错误信息
        //     }
        // )

        // response 拦截器
        instance.interceptors.response.use(
            response => {
                // switch (response.data.code) {
                //     case 1:
                //         /* Message({type:'success',showClose:true,duration:1500,message:response.data.msg});*/
                //         return Promise.resolve(response.data);
                //         break;
                //     case -1:
                //         window.sessionStorage.clear();
                //         Cookies.set('token', '');
                //         // router.push({
                //         //     path: '/login',
                //         // });
                //         break;
                //     case 0:
                //         Message({type: 'error', showClose: true, duration: 1500, message: response.data.message});
                //         break;
                //     default:
                //         Message({type: 'warning', showClose: true, duration: 1500, message: response.data.message});
                // }
                if (response.data.status === 500) {
                    // router.push({
                    //     path: '/login',
                    // });
                    Message({type: 'error', showClose: true, duration: 1500, message: response.data.message});
                }

            },
            err => {
                if (err && err.response) {
                    switch (err.response.status) {
                        case 400:
                            err.message = '请求错误';
                            break;
                        case 401:
                            err.message = '未授权，请登录';
                            break;
                        case 403:
                            err.message = '拒绝访问';
                            break;
                        case 404:
                            err.message = `请求地址出错: ${err.response.config.url}`;
                            break;
                        case 408:
                            err.message = '请求超时';
                            break;
                        case 500:
                            err.message = '服务器内部错误';
                            break;
                        case 501:
                            err.message = '服务未实现';
                            break;
                        case 502:
                            err.message = '网关错误';
                            break;
                        case 503:
                            err.message = '服务不可用';
                            break;
                        case 504:
                            err.message = '网关超时';
                            break;
                        case 505:
                            err.message = 'HTTP版本不受支持';
                            break;
                        default:
                    }
                }
                return Promise.reject(err); // 返回接口返回的错误信息
            }
        )

        // 请求处理
        instance(options).then(res => {
            resolve(res);
            return false;
        }).catch(error => {
            reject(error);
        })
    })
}
